#!/bin/sh
###
 # @Author: wjc
 # @Date: 2025-10-24 14:41:18
 # @LastEditors: wjc
 # @LastEditTime: 2025-10-24 14:41:23
 # @Description: 
### 
# 功能：给本次 pull 新增的上游 commit 统一添加 [up] 标记

# 步骤1：检查是否是从 up/master 合并的
merge_msg=$(git log -1 --pretty=format:%s HEAD)
if ! echo "$merge_msg" | grep -qE 'Merge (branch|remote-tracking branch) '\''up/master'\'''; then
  exit 0  # 非上游合并，退出
fi

# 步骤2：定位本次合并新增的上游 commit
before_merge_head=$(git rev-parse ORIG_HEAD)  # 合并前的本地 HEAD
upstream_head=$(git rev-parse up/master)      # 上游分支当前 HEAD
# 获取新增的上游 commit（按提交顺序排序）
new_upstream_commits=$(git rev-list $before_merge_head..$upstream_head --reverse)

if [ -z "$new_upstream_commits" ]; then
  exit 0  # 无新增上游 commit，退出
fi

# 步骤3：遍历新增 commit，添加 [up] 标记（跳过已标记的）
for commit in $new_upstream_commits; do
  # 检查是否已包含 [up] 标记
  if ! git log -1 --pretty=format:%s "$commit" | grep -q "\[up\]"; then
    # 保存原始提交信息
    orig_msg=$(git log -1 --pretty=format:%B "$commit")
    # 切换到该 commit 并改写信息
    git checkout "$commit" >/dev/null 2>&1
    git commit --amend -m "[up] $orig_msg" --no-edit >/dev/null 2>&1
    # 记录新 commit 哈希
    new_commit=$(git rev-parse HEAD)
    # 回到原分支
    git checkout - >/dev/null 2>&1
    # 替换旧 commit 为新 commit
    git replace "$commit" "$new_commit" >/dev/null 2>&1
  fi
done

# 步骤4：固化改写（刷新历史）
git filter-branch -- --all >/dev/null 2>&1
git replace -d $(git replace --list) >/dev/null 2>&1  # 清理临时替换
